package com.ztgf.shopping.models.service.shop;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.ztgf.commodity.models.vo.CommodityEvaluationScoreVO;
import com.ztgf.common.constant.Result;
import com.ztgf.search.models.dto.EsShopDTO;
import com.ztgf.shopping.models.bo.shop.*;
import com.ztgf.shopping.models.dto.audit.AuditDTO;
import com.ztgf.shopping.models.dto.shop.ShopInfoDTO;
import com.ztgf.shopping.models.vo.shop.*;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 店铺表服务
 *
 * @author zhanghualang
 * @Date 2020-05-28 14:35:39
 */
public interface IShopInfoService extends IService<ShopInfoDTO> {
    boolean add(ShopInfoSaveBO saveBO);

    ShopInfoVO selectVoById(Long id);

    ShopInfoVO selectVoByDomain(String domain);

    boolean update(ShopInfoUpdateBO updateBO);

    CommodityEvaluationScoreVO getScore(Long id); //店铺动态评分

    ShopInfoDTO getByMobileName(String name, String mobile);//根据账号名称或者手机号匹配买家店铺

    ShopInfoVO selectVoByUserId(Long id);//根据userId获取店铺信息

    HashMap<String, Integer> getVariousShop(); //获取各种店铺的数量 后端使用

    Page<ShopInfoManageVO> queryPageList(ShopInfoBO bo); //获取店铺列表 后端使用

    ShopInfoUserVO getUser(Long id); //根据店铺ID获取用户信息 后端使用

    ShopInfoUserVO getUser(Long id, Integer imType); //根据店铺ID获取用户信息 后端使用

    boolean getVerifyCloseShop(Long id); //关店验证 //后端使用

    boolean updateCloseShop(Long id, Long userId); //关店 后端使用

    Page<ShopInfoAbnormalVO> queryAbnormaPageList(ShopInfoBO bo); //异常店铺列表 后端使用

    Page<ShopInfoAllVO> queryAllList(ShopInfoAllBO bo); //用户列表 后端使用

    ShopInfoUseStatisticsVO getUseStatistics(Long id); //用户统计 //后端使用

    boolean getbyShopName(String shopName); //验证是否店铺名是否重复

    boolean getbyDomain(String domain); //验证是否店铺名是否重复

    ShopInfoTypeVO queryInfoByType(Integer type); //根据类型获取所有店铺id，手机号，邮箱，发送消息使用

    List<ShopInfoVO> queryList(ShopInfoQueryBO bo); //查询店铺，发送消息使用

    Page<ShopInfoDTO> queryApiPageList(ShopInfoApiBO bo); //店铺列表

    ShopInfoTypeVO queryInfoByIds(String shopIds); //根据ids获取所有店铺id，手机号，邮箱，发送消息使用

    ShopInfoVO getDKInfo(ShopInfoDKBO bo); //根据条件获取用户名称

    void autoUnfreeze(Long shopId);//自动解冻

    List<ShopInfoVO> getByShopIds(List<Long> shopIds);//根据店铺ids 查询相关信息(包含手机号)

    boolean updateAdminFreeze(Long id, Long userId); //admin 冻结店铺

    boolean checkShopIsClose(Long shopId);

    List<ShopInfoDTO> queryCloseStatus(Long minNo, Integer PageNo); //获取关店检测状态下的店铺

    List<ShopInfoDTO> queryCloseShop(Long minNo, Integer PageNo); //获取关店倒计时状态下的店铺

    boolean updatePayTypeByShopId(Long shopId, Integer payType);

    Result saveRegisteredShop(String shopVO);

    /**
     * @Description: 查询商品信息加入es，id为0时查询全部
     * @Author: chenyu.wang
     * @Params: [id]
     * @Date: 2020.12.22 14:50
     */
    List<EsShopDTO> queryEsShop(String id);

    /**
     * @return : com.ztgf.shopping.models.dto.audit.AuditDTO
     * @Author :chenyu.wang
     * @Description : 获取最近一次开店审核通过的信息
     * @Date : 10:01 2021.01.20
     * @Param : [shopId]
     **/
    List<ShopUpdateAuditVO> getOpenShopMessage(Long shopId, Integer type);

    /**
     * @return : com.ztgf.common.constant.Result<?>
     * @Author :chenyu.wang
     * @Description : 店铺类型变更提交
     * @Date : 13:55 2021.01.20
     * @Param : [shopVO]
     **/
    Result<?> updateShopTypeCommit(String shopVO);

    /**
     * @return : java.lang.Integer
     * @Author :chenyu.wang
     * @Description : 检查店铺是否可以变更
     * @Date : 2021.01.25 09:56
     * @Param : [shopId]
     **/
    Map<String, Integer> getCheckUpdateShop(Long shopId);

    /**
     * @return : java.lang.Integer
     * @Author :chenyu.wang
     * @Description : 变更时间为空值
     * @Date : 2021.01.27 16:27
     * @Param : [shopId]
     **/
    Integer updateChangeTime(Long shopId);

    /**
     * @Author :liyang
     * @Description :根据条件（ds，type状态 0全部用户，1全部店铺(包含子账户)，2全部旗舰店，3全部专卖店，4全部专营店，5全部买家（全部注册用户））,查询用户信息
     * @param shopIds
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<ShopInfoTypeVO> queryshopInfoByType(String shopIds, Integer type, Integer pageNum, Integer pageSize);

    Page<ShopInfoVO> queryPageListBySms(ShopInfoQueryBO bo);

    ShopInfoDTO getByUserId(Long userId);

    Page<ShopOverdueVO> queryOverdueList(ShopOverdueBO bo);
}
